﻿using System;
using System.Collections.ObjectModel;
using Oracle.DataAccess.Client;

namespace ISHotelApp.Database
{
    [Serializable]
    public class ObjednavkaPokojeTable : DbTable
    {
        public static String TABLE_NAME = "Objednavka_pokoje";

        public String SQL_SELECT = "SELECT * FROM Objednavka_pokoje";
        public String SQL_SELECT_id_pokoje = "SELECT * FROM Objednavka_pokoje WHERE id_pokoje=:id_pokoje AND id_pobytu=:id_pobytu";
        public String SQL_SELECT_id_pobytu = "SELECT * FROM Objednavka_pokoje WHERE id_pobytu=:id_pobytu";
        public String SQL_INSERT = "INSERT INTO Objednavka_pokoje (id_pokoje, id_pobytu) VALUES (:id_pokoje, :id_pobytu)";
        public String SQL_DELETE = "DELETE FROM Objednavka_pokoje WHERE id_pokoje=:id_pokoje AND id_pobytu=:id_pobytu";

        public ObjednavkaPokojeTable()
            : base(TABLE_NAME)
        {
        }

        /**
 * Insert the record.
 **/
        public int Insert(ObjednavkaPokoje Objednavka_pokoje)
        {
            mDatabase.Connect();
            OracleCommand command = mDatabase.CreateCommand(SQL_INSERT);
            PrepareCommand(command, Objednavka_pokoje);
            int ret = mDatabase.Insert(command);
            mDatabase.Close();
            return ret;
        }

        /**
         * Prepare a command.
         **/

        private void PrepareCommand(OracleCommand command, ObjednavkaPokoje Objednavka_pokoje)
        {
            command.Parameters.Add(new OracleParameter(":" + ObjednavkaPokoje.ATTR_id_pokoje, OracleDbType.Decimal));
            command.Parameters[":" + ObjednavkaPokoje.ATTR_id_pokoje].Value = Objednavka_pokoje.id_pokoje;

            command.Parameters.Add(new OracleParameter(":" + ObjednavkaPokoje.ATTR_id_pobytu, OracleDbType.Decimal));
            command.Parameters[":" + ObjednavkaPokoje.ATTR_id_pobytu].Value = Objednavka_pokoje.id_pobytu;
        }

        /**
         * Select records.
         **/
        public Collection<ObjednavkaPokoje> Select()
        {
            mDatabase.Connect();
            OracleCommand command = mDatabase.CreateCommand(SQL_SELECT);
            OracleDataReader reader = mDatabase.Select(command);

            Collection<ObjednavkaPokoje> Objednavka_pokojes = Read(reader);
            reader.Close();
            mDatabase.Close();
            return Objednavka_pokojes;
        }

        /**
         * Select the record.
         **/
        public ObjednavkaPokoje Select( int id_pobytu)
        {
            mDatabase.Connect();
            OracleCommand command = mDatabase.CreateCommand(SQL_SELECT_id_pobytu);
            
            command.Parameters.Add(new OracleParameter(":" + ObjednavkaPokoje.ATTR_id_pobytu, OracleDbType.Decimal));
            command.Parameters[":" + ObjednavkaPokoje.ATTR_id_pobytu].Value = id_pobytu;

            OracleDataReader reader = mDatabase.Select(command);

            Collection<ObjednavkaPokoje> Objednavka_pokojes = Read(reader);
            ObjednavkaPokoje Objednavka_pokoje1 = null;
            if (Objednavka_pokojes.Count == 1)
            {
                Objednavka_pokoje1 = Objednavka_pokojes[0];
            }
            reader.Close();
            mDatabase.Close();
            return Objednavka_pokoje1;
        }

        public ObjednavkaPokoje Select(int id_pokoje, int id_pobytu)
        {
            mDatabase.Connect();
            OracleCommand command = mDatabase.CreateCommand(SQL_SELECT_id_pokoje);

            command.Parameters.Add(new OracleParameter(":" + ObjednavkaPokoje.ATTR_id_pokoje, OracleDbType.Decimal));
            command.Parameters[":" + ObjednavkaPokoje.ATTR_id_pokoje].Value = id_pokoje;
            command.Parameters.Add(new OracleParameter(":" + ObjednavkaPokoje.ATTR_id_pobytu, OracleDbType.Decimal));
            command.Parameters[":" + ObjednavkaPokoje.ATTR_id_pobytu].Value = id_pobytu;

            OracleDataReader reader = mDatabase.Select(command);

            Collection<ObjednavkaPokoje> Objednavka_pokojes = Read(reader);
            ObjednavkaPokoje Objednavka_pokoje1 = null;
            if (Objednavka_pokojes.Count == 1)
            {
                Objednavka_pokoje1 = Objednavka_pokojes[0];
            }
            reader.Close();
            mDatabase.Close();
            return Objednavka_pokoje1;
        }

        private Collection<ObjednavkaPokoje> Read(OracleDataReader reader)
        {
            Collection<ObjednavkaPokoje> Objednavka_pokojes = new Collection<ObjednavkaPokoje>();

            while (reader.Read())
            {
                ObjednavkaPokoje Objednavka_pokoje = new ObjednavkaPokoje();
                Objednavka_pokoje.id_pobytu = (int)reader.GetDecimal(0);
                Objednavka_pokoje.id_pokoje = (int)reader.GetDecimal(1);
                Objednavka_pokojes.Add(Objednavka_pokoje);
            }
            return Objednavka_pokojes;
        }

        /**
         * Delete the record.
         */
        public int Delete(int id_pokoje, int id_pobytu)
        {
            mDatabase.Connect();
            OracleCommand command = mDatabase.CreateCommand(SQL_DELETE);

            command.Parameters.Add(new OracleParameter(":" + ObjednavkaPokoje.ATTR_id_pokoje, OracleDbType.Decimal));
            command.Parameters[":" + ObjednavkaPokoje.ATTR_id_pokoje].Value = id_pokoje;

            command.Parameters.Add(new OracleParameter(":" + ObjednavkaPokoje.ATTR_id_pobytu, OracleDbType.Decimal));
            command.Parameters[":" + ObjednavkaPokoje.ATTR_id_pobytu].Value = id_pobytu;

            int ret = mDatabase.Delete(command);
            mDatabase.Close();
            return ret;
        }
    }
}